package controllers;

import java.io.FileInputStream;
import java.io.InputStream;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.codehaus.groovy.util.StringUtil;

import json.CursoSerializer;
import json.UsuarioSerializer;

import models.Curso;
import models.PlanEstudio;
import models.Usuario;

import play.db.jpa.Blob;
import play.mvc.Controller;
import play.mvc.With;

@Check("admin")
@With(Secure.class)
public class Administrador extends Controller{

	public static void tablaCursosAdmin(){
		render();
	}
	
	public static void obtenerCursosAdmin(int page,int rows,String sidx,String sord){
		HashMap<String , Object> response=new HashMap<String, Object>();
		
		List<Curso> listaCursos=Curso.find("select c from Curso c order by "+sidx+" "+sord).fetch(page,rows);
		
		response.put("page",String.valueOf(page));
		response.put("rows", listaCursos);
		renderJSON(response,new CursoSerializer());
		
		
	}
	
	public static void editarCursoAdmin(long id,String nombrecurso,int codigocurso,int numerocreditos,String plan){
		PlanEstudio planEstudio=PlanEstudio.find("byNombreplan", plan).first();
		Curso curso=Curso.findById(id);
		curso.nombrecurso=nombrecurso;
		curso.numerocreditos=numerocreditos;
		curso.codigocurso=codigocurso;
		curso.planEstudio=planEstudio;
		curso.save();
		
	}
	
	public static void adicionarCursoAdmin(String nombrecurso,int codigocurso,int numerocreditos,String nombreplan){
		PlanEstudio planEstudio=PlanEstudio.find("byNombreplan", nombreplan).first();
		Curso curso=new Curso(planEstudio, nombrecurso, numerocreditos, codigocurso);
		curso.save();
	}
	
	public static void tablaBusquedaCursoAdmin(){
		render();
	}
	
	public static void busquedaCursoAdmin(int page,int rows,String sidx,String sord){
		HashMap<String , Object> response=new HashMap<String, Object>();
		List<Object> lista=new ArrayList<Object>();
		String nombrecurso=params.get("nombrecurso");
		String codigocurso=params.get("codigocurso");
		String numerocreditos=params.get("numerocreditos");
		String nombreplan=params.get("nombreplan");
		
		if(StringUtils.isNotEmpty(nombrecurso)){
			lista=Curso.find("select c from Curso c where c.nombrecurso =?", nombrecurso).fetch(page, rows);
		}
		else
		if(StringUtils.isNotEmpty(codigocurso)){
			lista=Curso.find("select c from Curso c where c.codigocurso =?", Integer.parseInt(codigocurso)).fetch(page, rows);
		}
		else
		if(StringUtils.isNotEmpty(numerocreditos)){
			lista=Curso.find("select c from Curso c where c.numerocreditos =?", Integer.parseInt(numerocreditos)).fetch(page, rows);
		}
		else
		if(StringUtils.isNotEmpty(nombreplan)){
			lista=PlanEstudio.find("select c from Curso c where c.planEstudio.nombreplan =?", nombreplan).fetch(page, rows);
		}
		
		response.put("page", String.valueOf(page));
		response.put("rows", lista);
		renderJSON(response,new CursoSerializer());
	}
	
	public static void usuarioInfoDetallado(){
		 render();
	 }
	
	public static void loadUsuarioJson(long id){
		Usuario usuario=Usuario.findById(id);
		renderJSON(usuario,new UsuarioSerializer());
	}
	
	
	public static void subirArchivo(long id,Blob file){
		Usuario usuario=Usuario.findById(id);
		usuario.file=file;
		usuario.save();
	}
	
	public static void getArchivo(long id){
		Usuario usuario=Usuario.findById(id);
		response.setContentTypeIfNotSet(usuario.file.type());
		InputStream file=usuario.file.get();
		renderBinary(file);
	}
	
	public static void obtenerUsuarios(int page,int rows,String sidx,String sord){
		HashMap<String,Object> response=new HashMap<String, Object>();
		List<Usuario> listaUsuario=Usuario.find("select u from Usuario u").fetch(page, rows);
		response.put("page", String.valueOf("page"));
		response.put("rows", listaUsuario);
		renderJSON(response,new UsuarioSerializer());
	}
	
}
